package main
import (
	"fmt"
	"math/rand"
	"time"
)

func main(){
	work4()
}

func work1(){
	//作业一：
	var array [10]int
	sum := 0
	flag := false
	max := 0
	rand.Seed(time.Now().UnixNano())
	for i:=0;i<10;i++{
		array[i] = rand.Intn(100) + 1
		sum += array[i]
		if array[i] == 55{
			flag = true
		}
		if array[i] > max {
			max = array[i]
		}
	}
	for i:=0;i < 10 - 1 ;i++{
		for j := 0; j < 10 - 1 - i;j++{
			if array[j] > array[j + 1]{
				array[j+1],array[j] = array[j],array[j+1]
			}
		}
	}
	fmt.Println("数组：",array,"  平均值：",float64(sum/10),"  最大值（下标）：",array[9],"(9)","是否存在55:",flag)
}

func work2(){
	//作业2：
	/*已知有一个排序好的升序数组，要求插入一个元素，最后打印该数组，顺序依然是升序*/
	// 关键：数组是固定的，长度是不能动态变化的，因此我们需要再另外定义一个比原数组长度大一的数组
	var arr = [5]int{19, 23, 44, 53, 241}
	fmt.Println("原数组:", arr)
	var arr2 = [6]int{}
	var num int
	fmt.Println("请输入一个元素:")
	fmt.Scanf("%d", &num)
	if num > arr[len(arr)-1]{
		var arr2slice = arr2[:]
		var arrslice = arr[:]
		arrslice = append(arrslice,num)
		copy(arr2slice,arrslice)
		fmt.Println(arr2slice)
	}else{
	for i:=0;i<len(arr);i++{
		if num > arr[i] {
			arr2[i] = arr[i]
		}else if num < arr[i]{
			arr2[i] = num
			for j := i;j<len(arr);j++{
				arr2[j+1] = arr[j]
			}
			break
		}
	}
	}
	fmt.Printf("插入%d后数组为:%v", num, arr2)
	
}

func work3(){
	var array [3][4]int
	for i:=0;i<3;i++{
		for j:=0;j<4;j++{
			fmt.Printf("请输入数值：")
			fmt.Scanln(&array[i][j])
		}
		fmt.Println()
	}
	fmt.Println(array)
	for i:=0;i<3;i++{
		for j:=0;j<4;j++{
			if i == 0 || i== 2 || j==0 ||j==3{
				array[i][j] = 0
			}
		}
	}
	for i:=0;i<3;i++{
		for j:=0;j<4;j++{
			fmt.Printf("\t%v",array[i][j])
		}
		fmt.Println()
	}
}

func work4(){
	//随机生成10个数字，然后用冒泡法排序，然后用二分法找到数组中有没有99
	rand.Seed(time.Now().UnixNano())
	var intarr [10]int
	for i:=0;i<10;i++{
		intarr[i] = rand.Intn(100)+1
	}
	maopao(&intarr)
	fmt.Println(intarr)
	erfenfa(0,len(intarr)-1,&intarr,99)
}
func maopao(arr *[10]int){
	for i:=0;i<len(*arr)-1;i++{
		for j := 0;j < len(*arr) - 1 - i;j++{
			if arr[j] > arr[j+1]{
				arr[j],arr[j+1] = arr[j+1],arr[j]
			}
		}
	}
}
func erfenfa(left int,right int,arr *[10]int,obj int){
	if left > right{
		fmt.Println("抱歉，该数组没有这个数字")
		return 
	}
	middle := (left + right)/2
	if arr[middle] < obj {
		left = middle + 1
		erfenfa(left,right,arr,obj)
	}else if arr[middle] > obj{
		right = middle - 1
		erfenfa(left,right,arr,obj)
	}else if arr[middle] == obj{
		fmt.Printf("找到了%d这个数字",obj)
	}
}